#include "libc/stdint.h"
#include "register.h"
#include "driver/interrupt_id.h"

DEFINE_SYS_READ(CNTFRQ_EL0) // 不一样， 一秒变化50兆次
DEFINE_SYS_WRITE(CNTP_TVAL_EL0) // 多少次变化产生一个中断
DEFINE_SYS_WRITE(CNTP_CTL_EL0) // 激活 产生中断 功能


uint64_t get_frq(){
    return sys_read_CNTFRQ_EL0();
}


void generic_timer_reload(){
    sys_write_CNTP_TVAL_EL0(get_frq() / 1);
}

void generic_timer_handler(){
    printk("tick\n");
    generic_timer_reload();
}

void generic_timer_enable_interrupt(){
    interrupt_init(EL1_PHYSICAL_TIMER, LEVEL_MODE);

    generic_timer_reload();
    sys_write_CNTP_CTL_EL0(1);
}

